/**
 * Order 业务逻辑
 * @author WangXinLei
 * @date 2014-09-28
 */
package com.chnbst.bstyun.service;

import java.util.List;
import java.util.Map;

import com.chnbst.bstyun.model.pojo.Order;
import com.chnbst.bstyun.model.vo.OrderVo;

public interface OrderService {

	/**
	 * 添加订单
	 * @param order 订单信息
	 * @return 返回自动增量id对象
	 */
	boolean insertOrder(Order order);

	/**
	 * 更新订单
	 * @param Order 订单信息
	 * @return 布尔值 成功为true，失败为false
	 */
	boolean updateOrderByOrderId(Order order);

	/**
	 * 根据用户ID  或套餐ID  或产品ID 查询 Order 对象
	 * @param map
	 * @return 返回 订单列表
	 */
	List<OrderVo> selectOrderByCondition(Map<String, Object> map);
	
	/**
	 * 根据产品ID，套餐ID,用户ID，是否免费试用 状态  查询 单条订单是否存在
	 * @param order
	 * @return 返回 订单
	 */
	List<Order> selectOrderByIsFree(Map<String, Object> map);
	
	/**
	 * 根据用户ID和套餐ID查询 Order对象
	 * @param map
	 * @return 返回订单列表
	 */
	Order selectOrderByMealIdAndProductId(Map<String, Object> map);
	
	/**
	 * 根据订单ID查询 Order对象
	 * @param orderId 订单编号
	 * @return 返回订单
	 */
	Order selectOrderByOrderId(Integer orderId);
	
	/**
	 * 根据用户ID 查询ORDER 对象
	 * @param map
	 * @return
	 */
	List<OrderVo> selectOrderByUserId(Map<String, Object> map);
	
	/**
	 * 根据不定多条件查询orderVo对象
	 * @param map
	 * @return 返回 订单orderVo列表
	 */
	List<OrderVo> selectOrderByConditions(Map<String, Object> map);
	
	/**
	 * 根据不定多条件查询orderVo对象总数
	 * @param int
	 * @return 返回 订单orderVo总数
	 */
	int selectOrderVoCountByConditions(Map<String, Object> map);
	
	/**
	 * 根据订单ID查询 OrderVo对象
	 * @param orderId 订单编号
	 * @return 返回订单Vo
	 */
	OrderVo selectOrderVoByOrderId(Integer orderId);
	
	/**
	 * 查询已删除的orderVo对象
	 * @param map
	 * @return 返回 订单orderVo列表
	 */
	List<OrderVo> selectDeleteOrderVoByMap(Map<String, Object> map);
	
	/**
	 * 查询已删除的orderVo总数
	 * @param int
	 * @return 返回 订单orderVo总数
	 */
	int selectDeleteOrderVoCountByMap(Map<String, Object> map);

	/**
	 * 根据用户id以及角色查询该用户购买的套餐数量以及订单详情
	 * @param list
	 * @return 返回 订单orderVoList
	 */
	List<OrderVo> selectMealsNumByCondition(Map<String, Object> map);
	
	/**
	 * 根据用户ID查询 最近的OrderVo（套餐和产品分组）列表对象
	 * @param map
	 * @return 返回订单列表
	 */
	List<OrderVo> selectLastOrdersByUserId(Map<String, Object> map);
	
	/**
	 * 后台  获取订单列表的总数
	 * @param map
	 * @return
	 */
	int selectOrderCount(Map<String, Object> map);
	
	/**
	 * 后台  查询所有的订单信息
	 * @param map
	 * @return	订单列表
	 */
	List<OrderVo> selectAllOrders(Map<String, Object> map);
	
	/**
	 * 后台  根据订单号查询用户订单列表
	 * @param map
	 * @return 返回用户的详细信息
	 */
	OrderVo selectOrderDetailByOrderId(Integer orderId);
	
	/**
	 * 更新订单
	 * @param Order 订单信息
	 * @return 布尔值 成功为true，失败为false
	 */
	boolean updateOrderStateByOrderId(Order order);
}
